package com.tangcl.module_base.utils

import java.lang.Exception
import java.text.SimpleDateFormat
import java.util.*

/**
 * Created by TCL on 2021/5/18.
 * Describe:时间相关工具类
 */
object DateTimeUtils {
    /**
     *根据时间获取星期
     * @param dateTime 时间（格式：2020-10-23）
     * @return 对应的星期日 可能为空字符串
     */
    fun getWeek(dateTime: String?): String {
        val calendar = Calendar.getInstance()
        if (dateTime.isNullOrEmpty()) {
            calendar.time = Date(System.currentTimeMillis())
        } else {
            var date: Date? = null
            try {
                date = SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()).parse(dateTime)
            } catch (e: Exception) {
                e.printStackTrace()
            }
            if (date != null) {
                calendar.time = date
            } else {
                return ""
            }
        }
        return when (calendar.get(Calendar.DAY_OF_WEEK)) {
            1 -> {
                "周日"
            }
            2 -> {
                "周一"
            }
            3 -> {
                "周二"
            }
            4 -> {
                "周三"
            }
            5 -> {
                "周四"
            }
            6 -> {
                "周五"
            }
            else -> {
                "周六"
            }
        }
    }

    /**
     *比较时间先后
     * @param isBefore true(是否早于) false(是否晚于)
     * @param startTime 开始时间（格式需与format一致）
     * @param endTime 结束时间（格式需与format一致）
     * @param format 时间格式化（默认yyyy-MM-dd HH:mm:ss）
     * @return 对应的星期日 可能为空字符串
     */
    fun compare(isBefore: Boolean, startTime: String?, endTime: String?, format: String): Boolean {
        val sdf: SimpleDateFormat = if (format.isEmpty()) {
            SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault())
        } else {
            SimpleDateFormat(format, Locale.getDefault())
        }
        return try {
            val start = sdf.parse(startTime)
            val end = sdf.parse(endTime)
            if (start != null && end != null) {
                if (isBefore) {
                    start.time < end.time
                } else {
                    end.time > start.time
                }
            } else {
                false
            }
        } catch (e: Exception) {
            e.printStackTrace()
            false
        }
    }
}